home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 5
/
Gekikoh Dennoh Club Vol. 5 (Japan).7z
/
Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin
/
internet
/
webx
/
webxp040.lzh
/
Source
/
Plain2Xpression.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-09-27
|
5KB
|
207 lines
/* âeâLâXâgâtâ@âCâïé≡ Xpression î`Ä«é╔ò╧è╖ */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/dos.h>
#include "WebXpression.h"
#include "Jis2sjis.h"
/* É▄éΦò╘é╖âhâbâgÉö */
#define WRAP_DOT (short)512
#define LINE_Y 16
#define YOYUU 1024
extern void McPrint (char *);
extern int line_table_size;
extern char kmode;
XPTEXT *Plain2Xpression (HTTPFILE * httpfile, XPTEXT * old_xptext)
{
XPTEXT *xptext; /* ò╘éΦÆl */
LINE_PTR *l; /* î╗ì▌Åêù¥é╡é─éóéΘìsâeü[âuâï */
unsigned short w; /* âhâbâgÉö */
unsigned char *t1, *t2; /* î╗ì▌Åêù¥é╡é─éóéΘò╢ÄÜ */
unsigned char *t1e, *t2e; /* t1,t2 é╠ûûö÷ */
unsigned char *t1_old; /* üuÅêù¥é╡é╜ò╢ÄÜé≡ô╟é▄é╚é⌐é┴é╜Äûé╔é╖éΘüvùp */
unsigned char *t2t; /* é╗é╠ìsé╠ɵô¬é╠ t2 */
unsigned int t2_size = 0; /* t2 é╠âTâCâY */
unsigned char font_size = 6; /* ö╝èpò╢ÄÜé╠æσé½é│ */
unsigned char temp_kmode = kmode; /* ò╢ÄÜâRü[âh */
char aork = 0; /* JIS ùp ASCII(=0) or KANJI(=!0) */
unsigned short org_line = 0; /* î│é╠ HTML é╠ë╜ìsû┌é╛é┴é╜é⌐ */
xptext = _dos_malloc (sizeof (XPTEXT));
xptext->text = NULL;
xptext->line_ptr = NULL;
*(xptext->title) = '\0';
strcpy (xptext->title, "â^âCâgâïûóÉ▌ÆΦ");
#define XPTEXT_BUFFER_YOYUU 32768
/* é▒éΩê╩éáéΩé╬æ½éΦéΘé⌐é╚üH */
t2_size = httpfile->content_length * 2 + XPTEXT_BUFFER_YOYUU;
if ((xptext->text = _dos_malloc (t2_size)) == NULL) {
McPrint ("üª âüâéâèé¬æ½éΦé▄é╣é±üiâeâLâXâgâoâbâtâ@ùpé╠âüâéâèé¬èmò█é┼é½é▄é╣é±üj\n");
return (NULL);
}
/* ùvé╖éΘé╔ *t1 é⌐éτ *t2 é╔É«î`é╡é╚é¬éτâRâsü[é╡é─éóé¡éφé»é╛ */
t1 = httpfile->content; /* âeâLâXâgâtâ@âCâïû{æ╠é╓é╠â|âCâôâ^ */
t1e = t1 + httpfile->content_length; /* t1 é¬ t1e é╔ÆBé╡é╜éτÅIù╣ */
t2 = xptext->text; /* xptext âoâbâtâ@é╓é╠â|âCâôâ^ */
t2e = t2 + t2_size - YOYUU;
/* t2 é¬ t2e é╔ÆBé╡é╜éτÅIù╣üiâoâbâtâ@òsæ½üj */
if ((xptext->line_ptr = _dos_malloc (sizeof (LINE_PTR) * line_table_size)) == NULL) {
McPrint ("üª âüâéâèé¬æ½éΦé▄é╣é±üiìsô¬âèâXâgùpâüâéâèé¬èmò█é┼é½é▄é╣é±üj\n");
return (NULL);
}
l = xptext->line_ptr;
xptext->line = 0;
xptext->current_line = 0;
xptext->link_table = NULL;
xptext->link_table_buffer = NULL;
xptext->image_table = NULL;
xptext->link_table_max = 0;
xptext->image_table_max = 0;
/* ìsâïü[âv */
do {
w = 0;
t2t = t2;
/* îàâïü[âv */
do {
unsigned char c; /* Åêù¥é╖éΘò╢ÄÜ */
t1_old = t1;
c = *t1++;
/* JIS Ä₧é╠è┐ÄÜ IN/OUT âtâëâOé╠Åêù¥ */
if (c == 0x1b) { /* ESC */
/* ò╢ÄÜâRü[âhé¬ö╗éτé╚éóÄ₧é╔ ESC é≡î⌐é┬é»é╜éτ JIS é╞ö╗ÆΦ */
if (temp_kmode == K_AUTO)
temp_kmode = K_JIS;
if (temp_kmode == K_JIS) {
unsigned char c1 = *(t1 + 1);
switch (*t1) {
case '(':
if ((c1 == 'B') || (c1 == 'J')) { /* è┐ÄÜ OUT */
aork = 0;
t1 += 2;
}
break;
case '$':
if ((c1 == '@') || (c1 == 'B')) { /* è┐ÄÜ IN */
aork = !0;
t1 += 2;
}
break;
default:
break;
}
continue;
}
}
/* ò╢ÄÜâRü[âhé¬é▄é╛ö╗éτé╚éóÄ₧ */
if (temp_kmode == K_AUTO) {
/* 0x81~0x9f é≡î⌐é┬é»é╜éτ SJIS é╞ö╗ÆΦ */
if ((c >= 0x81) && (c <= 0x9f))
temp_kmode = K_SJIS;
/* 0xa1~0xcf é≡î⌐é┬é»é╜éτ EUC é╞ö╗ÆΦ */
if ((c >= 0xa1) && (c <= 0xcf))
temp_kmode = K_EUC;
}
if (c == 0x0d) {
aork = 0;
org_line++;
if (*t1 == 0x0a)
t1++;
break;
}
if (c == 0x0a) {
aork = 0;
org_line++;
break;
}
if (c == 0x09) {
if (w + font_size * 8 > WRAP_DOT) {
t1 = t1_old; /* ô╟é▄é╚é⌐é┴é╜é▒é╞é╔é╖éΘ */
break;
} else {
*t2++ = c;
w = (w + font_size * 8) / (short) (font_size * 8) * (short) (font_size * 8);
continue;
}
}
if (c < ' ') {
//*t2++ = c;
//w += font_size;
break;
}
if (((c == '`') && (temp_kmode <= K_EUC)) /* AUTO or SJIS or EUC */
||((temp_kmode == K_JIS) && (!aork) && (c == '`'))) {
if (w + font_size > WRAP_DOT) {
t1 = t1_old; /* ô╟é▄é╚é⌐é┴é╜é▒é╞é╔é╖éΘ */
break;
}
*t2++ = c; /* '`' é═ '``' é╔ */
*t2++ = c;
w += font_size;
continue;
}
if (((temp_kmode <= K_EUC) && (c < 0x80)) /* AUTO or SJIS or EUC */
||((temp_kmode == K_JIS) && (!aork))) {
/* éPâoâCâgò╢ÄÜé╠ÅΩìç */
if (w + font_size > WRAP_DOT) {
t1 = t1_old; /* ô╟é▄é╚é⌐é┴é╜é▒é╞é╔é╖éΘ */
break;
}
*t2++ = c;
w += font_size;
continue;
} else {
/* è┐ÄÜé╠ÅΩìç */
if ((w + font_size * 2) > WRAP_DOT) {
t1 = t1_old; /* ô╟é▄é╚é⌐é┴é╜é▒é╞é╔é╖éΘ */
break;
}
switch (temp_kmode) {
case K_AUTO:
case K_SJIS:
*t2++ = c;
*t2++ = *t1++;
break;
case K_EUC:
Jis2sjis (((c & 0x7f)), (*t1++ & 0x7f), t2);
break;
case K_JIS:
Jis2sjis (c, *t1++, t2);
break;
}
w += font_size * 2;
continue;
}
} while ((t1 < t1e) && (t2 < t2e));
l->start_dot = 0;
l->org_line = org_line;
l->num = t2 - t2t;
l++->ptr = t2t;
xptext->line++; /* ìsÉö */
} while ((t1 < t1e) && (t2 < t2e));
l->ptr = NULL;
xptext->kmode = temp_kmode;
/* ù]ò¬é╔èmò█é╡é╜âüâéâèâuâìâbâNé≡É╪éΦÄ╠é─éΘ */
_dos_setblock (xptext->text, (int) t2 - (int) (xptext->text));
_dos_setblock (xptext->line_ptr, sizeof (LINE_PTR) * (xptext->line));
return (xptext);
}